#include <iostream>
#include <vector>

// 抽象基类，定义算法的骨架
class DataAnalyzer {
public:
    // 模板方法，定义算法的结构
    void analyze() {
        loadData();
        processData();
        if (needExtraProcessing()) {  // 添加钩子方法
            extraProcessing();
        }
        saveReport();
    }

protected:
    virtual void loadData() = 0;
    virtual void processData() = 0;
    virtual void saveReport() = 0;
    virtual bool needExtraProcessing() { return false; }  // 钩子方法，默认不执行额外处理
    virtual void extraProcessing() {}  // 钩子方法的默认实现
};

// 具体实现类，实现具体步骤
class CSVDataAnalyzer : public DataAnalyzer {
protected:
    void loadData() override {
        std::cout << "Loading data from CSV file." << std::endl;
    }

    void processData() override {
        std::cout << "Processing CSV data." << std::endl;
    }

    void saveReport() override {
        std::cout << "Saving report from CSV analysis." << std::endl;
    }

    bool needExtraProcessing() override { return true; }  // 重写钩子方法
    void extraProcessing() override {
        std::cout << "Performing extra processing for CSV data." << std::endl;
    }
};

// 使用模板方法
int main() {
    CSVDataAnalyzer csvAnalyzer;
    csvAnalyzer.analyze();  // 执行定义在基类的模板方法
    return 0;
}